var config = require("./config.js"); //统一的网络请求方法
var util = require("./util.js")
import {
	AppType
} from './constant.js'

function request(params, isGetTonken) {
	// 全局变量
	var globalData = getApp() && getApp().globalData; // 如果正在进行登陆，就将非登陆请求放在队列中等待登陆完毕后进行调用

 
	var needToken = false
 

	wx.request({
		// url: config.domain + params.url,
		url: (params.domain ? params.domain : config.domain) + params.url,
		//接口请求地址
		data: params.data,
		header: {
			//'content-type': params.method == "GET" ? 'application/x-www-form-urlencoded' : 'application/json;charset=utf-8',
			// 'Authorization': params.login ? undefined : uni.getStorageSync('token')
			//'Access-Control-Allow-Origin': "http://192.168.110.197:8081",
			'Authorization': uni.getStorageSync('token'),
		},
		method: params.method == undefined ? "POST" : params.method,
		dataType: 'json',
		responseType: params.responseType == undefined ? 'text' : params.responseType,
		success: function(res) {
			if (res.statusCode == 200) {
				
				//如果有定义了params.callBack，则调用 params.callBack(res.data)
				if (params.callBack) {
					params.callBack(res.data);
				}
			} else if (res.statusCode == 500) {
				uni.showToast({
					title: "服务器出了点小差",
					icon: "none"
				});
			} else if (res.statusCode == 401) {

				// #ifdef H5
				const ua = navigator.userAgent.toLowerCase();
				if (ua.search(/MicroMessenger/i) > -1) uni.setStorageSync('appType', AppType.MP)
				// #endif
				uni.hideLoading();

			} else if (res.statusCode == 400 && !params.errCallBack) {
		
				uni.hideLoading();
				uni.showToast({
					title: res.data,
					icon: "none"
				});
				
			} else {
				//如果有定义了params.errCallBack，则调用 params.errCallBack(res.data)
				if (params.errCallBack) {

					params.errCallBack(res);
				}
				uni.hideLoading();
			}
			// if (!globalData.isLanding) {
			//   uni.hideLoading();
			// }
		},
		fail: function(err) {
			uni.hideLoading();
			if (err.errMsg == 'request:fail abort') {
				console.log('请求被取消啦~')
				return
			}
			setTimeout(() => {
				uni.showToast({
					// zheli
					title: "服务器出了点小差",
					icon: "none"
				});
			}, 1);
		}
	});
} //通过code获取token,并保存到缓存


var getToken = function() {
	// uni.login({
	//   success: res => {
	//     // 发送 res.code 到后台换取 openId, sessionKey, unionId
	//     request({
	//       login: true,
	//       url: '/login?grant_type=mini_app',
	//       data: {
	//         principal: res.code
	//       },
	//       callBack: result => {
	//         // 没有获取到用户昵称，说明服务器没有保存用户的昵称，也就是用户授权的信息并没有传到服务器
	//         if (!result.nickName) {
	//           updateUserInfo();
	//         }

	//         if (result.userStutas == 0) {
	//           uni.showModal({
	//             showCancel: false,
	//             title: '提示',
	//             content: '您已被禁用，不能购买，请联系客服'
	//           });
	//           uni.setStorageSync('token', '');
	//         } else {
	//           uni.setStorageSync('token', 'bearer' + result.access_token); //把token存入缓存，请求接口数据时要用
	//         }

	//         var globalData = getApp().globalData;
	//         globalData.isLanding = false;

	//         while (globalData.requestQueue.length) {
	//           request(globalData.requestQueue.pop());
	//         }
	//       }
	//     }, true);
	//   }
	// });
}; // 更新用户头像昵称

/**
 * 微信公众号登录
 * @param {Object} fn  登录成功回调
 * @param {String} code  微信授权返回的code, 用于登录
 */
var mpLogin = function(fn, code) {
	// 发送 res.code 到后台换取 openId, sessionKey, unionId
	request({
		login: true,
		url: '/appLogin',
		data: {
			principal: code,
			appType: AppType.MP, // 登录类型
		},
		callBack: result => {
			loginSuccess(result, fn)
		}
	}, true);

};

var getToken = function(fn) {

};

/**
 * 登录成功后执行
 * @param {Object} result  登录成功返回的数据
 * @param {Object} fn		登录成功后的回调
 */
function loginSuccess(result, fn) {

}

function updateUserInfo() {
	uni.getUserInfo({
		success: res => {
			var userInfo = JSON.parse(res.rawData);
			request({
				url: "/p/user/setUserInfo",
				method: "PUT",
				data: {
					avatarUrl: userInfo.avatarUrl,
					nickName: userInfo.nickName
				}
			});
		}
	});
}

function isUserAuthInfo() {
	// 查看是否授权
	wx.getSetting({
		success(res) {
			if (res.authSetting['scope.userInfo']) {
				// 已经授权，可以直接调用 getUserInfo 获取头像昵称
				wx.getUserInfo({
					success: function(res) {
						console.log(res.userInfo);
					}
				});
			}
		}
	});
}

function mpAuthLogin(page, needCode) {
	// 在微信环境打开,请求公众号网页登陆
	var redirectUrl = null;

	if (!page) {
		redirectUrl = window.location.href
	} else {
		var {
			protocol,
			host,
			pathname,
			hash
		} = window.location
		var redirectUrl = `${protocol}//${host}` + page
	}
	var scope = 'snsapi_userinfo'
	window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + config.mpAppId +
		'&redirect_uri=' +
		encodeURIComponent(redirectUrl) + '&response_type=code&scope=' + scope + '&state=' + (needCode ? 'needCode' :
			'unNeedCode') +
		'#wechat_redirect'

}

/**
 * 获取购物车商品数量
 */
function getCartCount() {
	if (!uni.getStorageSync('token')) {
		// wx.removeTabBarBadge({
		// 	index: 2
		// });
		util.removeTabBadge()
		return
	}
	
	var params = {
		url: "/p/shopCart/prodCount",
		method: "GET",
		dontTrunLogin: true,
		data: {},
		callBack: function(res) {
			if (res > 0) {
				wx.setTabBarBadge({
					index: 2,
					text: res + ""
				});
				var app = getApp().globalData;
				getApp().globalData.totalCartCount = res;
			} else {
				wx.removeTabBarBadge({
					index: 2
				});
				var app = getApp().globalData;
				getApp().globalData.totalCartCount = 0;
			}
		}
	};
	request(params);
}

/**
 * 获取定位信息
 */

function geoCoder(latitude, longitude) {
	return uni.request({
		url: 'https://apis.map.qq.com/ws/geocoder/v1',
		method: "GET",
		header: {
			'Access-Control-Allow-Origin': "*",
		},
		data: {
			location: latitude + ',' + longitude,
			key: '7R3BZ-IH7WQ-6RN5Q-4CBS4-6QUXV-3UB55'
		},
		success(res) {
			return res
			// resolve()
		},
		fail(err) {
			return err
		}
	})
}

exports.getToken = getToken;
exports.request = request;
exports.getCartCount = getCartCount;
exports.updateUserInfo = updateUserInfo;
exports.mpAuthLogin = mpAuthLogin;
exports.loginSuccess = loginSuccess;
exports.mpLogin = mpLogin;
exports.geoCoder = geoCoder;